//  generator 
/*  普通函数前面带* 是生成器函数 
    调用的时候并不是立即执行，而是生成一个生成器对象
    直到我们手动调用这个函数的next方法 这个函数的函数体才开始执行，
    函数体内可以随时使用yield 关键词 往外返回一个值，可以在next方法返回值里作为参数拿到那个值
    yield 不是像return，只是暂停这个函数的执行，直到下一个next方法，就从yield这个地方往后执行

    next方法里传一个参数，会作为yield方法的返回值拿到

    如果调用throw异常，会在yield继续执行的时候捕获这个异常

*/
function * foo() {
    console.log("start")
    try {
       const res = yield 'foo'
        console.log(res) 
    }catch(e) {
        console.log(e)
    }
    
}
const generator = foo()
const r = generator.next()
console.log(r)

generator.next("bar")

// generator.throw(new Error('generator errors'))

